8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 IntelliJ GUI 设计器上的 GridLayoutManager 中,使一列的重量是另一列的两倍

Abhay Gori 2月前

124 0

是否可以使得 GridLayoutManager 中都具有“想要增长”属性的两列占据不同的比例?就像,它们不是都占据相等的比例……

是否可以让 GridLayoutManager 中具有“想要增长”属性的两列占据不同的比例?

就像这样,不是让它们都占据放置所有不想增长的列之后剩余的相同空间,而是让一个占据的空间是另一个的两倍,有点像 Android 中的属性“layout_columnWeight”。

如果没有这样的东西,是否有任何解决方法,或者我是否只能在调整框架大小时始终使用两列相等?

(作为参考,这两列彼此相邻,并且周围还有更多不具备“想要增长”属性的列)

帖子版权声明 1、本帖标题:在 IntelliJ GUI 设计器上的 GridLayoutManager 中,使一列的重量是另一列的两倍
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Abhay Gori在本站《swing》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 创建嵌套网格布局:使用嵌套面板模拟列权重,然后设置“想要增长”属性:将“想要增长”属性应用于嵌套面板,并使用 GridLayoutManager 设置管理其比例

  • 您对每一列使用不同的 \'weightx\' 约束。请阅读 Swing 教程中的

  • 运行我的脚本时,我收到了几个这样的错误:警告:无法修改标题信息 - 标题已经由(输出开始于 /some/file.php:12)在 /some/file.php 行发送...

    运行我的脚本时,我收到几个如下错误:

    警告:无法修改标头信息 - 标头已由( 输出开始于 /some/file.php:12 )在 /some/file.php on 23 行

    错误消息中提到的行包含 header() setcookie() 调用。

    这可能是什么原因造成的?该如何解决?

  • 发送标题之前没有输出!

    在进行任何输出之前, 必须调用发送/修改 HTTP 标头的函数 .摘要⇊否则调用失败:

    警告:无法修改标头信息 - 标头已发送(输出开始于脚本:行)

    修改 HTTP 标头的一些函数包括:

    输出可以是:

    • p5

      • print , echo and other functions producing output
      • Raw <html> sections prior <?php code.

    为什么会发生这种情况?

    要理解为什么必须在输出之前发送标头,必须查看典型的 HTTP 响应。PHP 脚本主要生成 HTML 内容,但也将一组 HTTP/CGI 标头传递给 Web 服务器:

    HTTP/1.1 200 OK
    Powered-By: PHP/5.3.7
    Vary: Accept-Encoding
    Content-Type: text/html; charset=utf-8
    
    <html><head><title>PHP page output page</title></head>
    <body><h1>Content</h1> <p>Some more output follows...</p>
    and <a href="/"> <img src=internal-icon-delayed> </a>
    

    页面/输出始终 跟在 标头后面。PHP 必须先将标头传递给 Web 服务器。它只能执行一次。双换行后,它就再也无法修改它们了。

    当 PHP 收到第一个输出 ( print , echo , <html> ) 时,它将 刷新 所有收集的标头。之后它可以发送它想要的所有输出。但那时不可能发送进一步的 HTTP 标头。

    如何才能找出过早输出发生的位置?

    警告 header() 包含定位问题原因的所有相关信息:

    信息 - 标头已由 (输出开始于 /www/usr2345/htdocs/auth.php:52 )在 /www/usr2345/htdocs/index.php 第 100 行发送

    调用 header() 脚本

    括号内的 \' 输出开始于 auth.php line 52 。这就是您必须查找过早输出的地方。

    典型原因:

    1. p65

      p14

      p15

      • print , echo , printf , vprintf
      • trigger_error , ob_flush , ob_end_flush , var_dump , print_r
      • readfile , passthru , flush , imagepng , imagejpeg

      p16

    2. p66

      p17

      <!DOCTYPE html><?php    // Too late for headers already.

      p18

      • Place form processing code atop scripts.
      • Use temporary string variables to defer messages.
      • The actual output logic and intermixed HTML output should follow last.

    3. p67

      p19

       <?php# There's a SINGLE space/newline before <? - Which already seals it.

      p20

      ?><?php

      p21

    4. p68

      p22

      p23

      joes editor showing UTF-8 BOM placeholder, and MC editor a dot

      p24

      beav hexeditor showing utf-8 bom

      p25

      p69

      p26

      phptags  --whitespace  *.php

      p27

    5. p70

      p28

      p29

    6. p71

      p30

      • It's occasionally the gzip stream encoding setting or the ob_gzhandler .
      • But it could also be any doubly loaded extension= modulegenerating an implicit PHP startup/warning message.

    7. p72

      p31

      p32

    没有错误信息

    如果您已禁用 err或_reporting or display_errors 关闭 php.ini ,则不会出现任何警告。但忽略错误并不能让问题消失。过早输出后,标题仍然无法发送。

    因此,当 header("Location: ...") 重定向默默失败时,建议探测警告。使用调用脚本上的两个简单命令重新启用它们:

    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    

    或者 set_error_handler("var_dump"); 如果一切都失败了。

    说到重定向标头,您应该经常使用如下习语来表示最终的代码路径:

    exit(header("Location: /finished.html"));
    

    最好甚至有一个实用功能,当出现故障时,它可以打印用户消息 header()

    输出缓冲作为解决方法

    PHP 的 输出缓冲 是缓解此问题的一种解决方法。它通常工作可靠,但不应取代正确的应用程序结构和将输出与控制逻辑分开。它的实际目的是最大限度地减少到 Web 服务器的分块传输。

    1. p39

    2. p40

      • 【【p41】】

      • 【【p42】】

      • 【【p43】】

    因此,这两种方法都可能变得不可靠 - 特别是在开发设置和/或生产服务器之间切换时。这就是为什么输出缓冲被广泛认为只是一种拐杖/严格来说是一种解决方法。

    另请参阅 基本使用示例 ,了解更多优缺点:

    • PHP 中的输出缓冲是什么?
    • 为什么在 PHP 中使用输出缓冲?
    • 使用输出缓冲被认为是一种不好的做法吗?
    • 使用输出缓冲作为“标头已发送”的正确解决方案的用例

    但它在另一台服务器上运行良好!?

    如果您之前没有收到标头警告,则 输出 bufferingphp.ini 设置 已更改。它可能在当前/新服务器上未配置。

    检查 headers_sent()

    您始终可以使用 headers_sent() 来探测是否仍有可能...发送标头。这对于有条件地打印信息或应用其他后备逻辑很有用。

    if (headers_sent()) {
        die("Redirect failed. Please click on this link: <a href=...>");
    }
    else{
        exit(header("Location: /user.php"));
    }
    

    有用的后备解决方法是:

    • p74

      p49

       <meta http-equiv="Location" content="http://example.com/">

      p50

       <meta http-equiv="Refresh" content="2; url=../target.html">

      p51

    • p75

      p52

       <script> location.replace("target.html"); </script>

      p53

    但是,当真正的 HTTP header() 调用失败时,这两种方法都可以做出可接受的回退。理想情况下,您始终会将其与用户友好的消息和可点击链接相结合,作为最后的手段。(例如, http_redirect() PECL 扩展就是这样做的。)

    为什么 setcookie() 并且 session_start() 也受到影响

    setcookie() session_start() 需要发送 Set-Cookie: HTTP 标头。因此适用相同的条件,并且对于过早输出的情况将生成类似的错误消息。

    (当然,它们还会受到浏览器中禁用的 cookie 甚至代理问题的影响。会话功能显然还取决于可用磁盘空间和其他 php.ini 设置等。)

    更多链接

  • 常规 notepad.exe 也比较棘手。我通常使用不会添加 BOM 的 NetBeans,即使文件经过编码也是如此。稍后在记事本中编辑文件会弄乱一切,尤其是对于 IIS 作为 Web 服务器的情况。似乎 apache 会丢弃(无意添加的)BOM。

  • 从 php 文件末尾删除结尾的 ?> 通常是一种很好的做法,有助于最大限度地减少这些错误。文件末尾不会出现不需要的空格,您稍后仍可以向响应添加标头。如果您使用输出缓冲,并且不希望在包含的文件生成的部分末尾看到添加不需要的空格,这也很方便。

  • @PeterSMcIntyre UTF8 BOM 大概(修复它)/没有启用输出缓冲(不要依赖于它)。

  • 5xum 2月前 0 只看Ta
    引用 9

    您可能想补充一个遗漏的细节。如果错误消息省略了该信息,$file = $line = null; headers_sent($file, $line); die(\'$file:$line\'); 将准确告诉您发送标头的内容。不确定原因,但有时似乎确实如此。

  • djvg 2月前 0 只看Ta
    引用 10

    我有一个不受我控制的文件结构。我需要从 ServletContextListener 中访问 tomcat 目录之外的文件。这是我的代码://访问随机文件以获取完整

    我有一个不受我控制的文件结构。我需要从我的目录内部访问一个 ServletContextListener 位于 tomcat 目录之外的文件。

    这是我的代码:

    // access a random file to get full path
    URL basePathURL = MyContextListener.class.getResource("/somereference.txt");
    String path = URLDecoder.decode(basePathURL.getPath(), "UTF-8");
    
    // get relevant part of the path
    String tomcatServerDir = path.substring(0, path.indexOf("server"));
    
    // get the parent
    Path myRequiredFileDirPath = Paths.get(tomcatServerDir).getParent();
    
    // form path to required file
    String confPath = credentialsFileDirPath.toString() + "/fileToAccess.txt";
    File myFile = new File(confPath);
    
    // code to read the file here
    

    这会出现以下错误:

    java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/MyApp/
    at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
    at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
    at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
    at java.base/java.nio.file.Path.of(Path.java:147)
    at java.base/java.nio.file.Paths.get(Paths.java:69)
    

    目录结构如下:

    路径为 somereference.txt :C:\MyApp\server\tomcat\webapps\mywebapp\WEB-INF\classes\somereference.txt

    路径为 fileToAccess.txt :C:\MyApp\fileToAccess.txt

    路径 MyApp 可能因应用程序部署位置而异。但是,其中的结构 MyApp 不会改变。

    在课堂上 fileToAccess.txt 阅读的最佳方式是什么 ServletContextListener

  • 对于情况 6,错误的未知来源可能与浏览器中止的请求有关(在访问日志中查找 HTTP 状态 499,尽管它可能不会在所有情况下出现)。ignore_user_abort=On 可能会修复/解决此类情况下的“标头已发送”通知,至少对我来说是有效的。

  • 发送 HTTP 标头(使用 时会触发此错误消息 setcookie or header 。在 HTTP 标头之前输出某些内容的常见原因是:

    • p1

         <?php  // Note the space before "<?php"  ?>

    为了避免这种情况,只需省略结尾 ?> — — 反正它不是必需的。

    • 字节顺序标记 。使用十六进制编辑器检查您的 php 文件,看看是否是这种情况。它们应该以字节开头 3F 3C 从文件开头 EF BB BF 删除 BOM
    • 显式输出,例如对的调用 echo , printf , readfile , passthru 、之前的代码 <? 等等。
    • 如果php.ini 属性,php 会输出警告。php 不会因为程序员的错误而崩溃,而是默默地修复错误并发出警告。虽然您可以修改 display_errors display_errors or error_reporting ,但您更应该修复问题。
      常见原因是访问数组中未定义的元素(例如 $_POST['input'] 未使用 empty or isset 来测试输入是否设置),或者使用未定义的常量而不是字符串文字(如 $_POST[input] ,请注意缺少的引号)。

    打开 输出缓冲 应该可以解决问题;调用 ob_start 都会缓冲在内存中,直到释放缓冲区,例如使用 ob_end_flush .

    然而,虽然输出缓冲可以避免这些问题,但您确实应该确定为什么您的应用程序在 HTTP 标头之前输出 HTTP 主体。这就像接电话并讨论您的一天和天气情况,然后才告诉来电者他打错了电话。

  • 引用 13

    我以前多次遇到过这个错误,并且我确信所有 PHP 程序员都至少遇到过一次这个错误。

    可能的解决方案 1

    文件开头 之前 文件结尾 之后的 空格引起的

    前任)

    <!-- THERE SHOULD BE NO BLANK SPACES HERE -->
    <?php  
    
       echo "your code here";
    
    ?>
    <!-- THERE SHOULD BE NO BLANK SPACES HERE -->
    

    检查与导致此错误的文件相关的所有文件。

    注意: Sometimes EDITOR(IDE) like gedit (a default Linux editor) add one blank line on save file. This should not happen. If you are using Linux. You can use VI editor to remove space/lines after ?> at the end of the page.

    可能的解决方案 2: 如果不是这种情况,则使用 ob_start 输出缓冲:

    <?php
      ob_start();
    
      // code 
    
     ob_end_flush();
    ?> 
    

    这将打开输出缓冲,并且在页面缓冲后将创建标题。

  • ServletContext.getResourceAsStream() 将从相对于 WAR 文件根目录的给定路径加载文件。例如:

    ServletContext ctx;
    InputStream configStream = ctx.getResourceAsStream("/WEB-INF/somereference.txt");
    
  • 我不想读取 somereference.txt。我想读取 fileToAccess.txt,它在外面。我正在使用 somereference.txt 获取完整路径,然后我想访问 fileToAccess.txt。但目前无法做到。

  • 我在将文件上传到支持 PHP5.3 的服务器时遇到了这样的问题,请使用 PHP 5.6 或更高版本的服务器

  • @jack true,我同意你的观点。理想的方法是删除 php 标签开头之前的空格

  • 而不是下面的行

    //header("Location:".ADMIN_URL."/index.php");
    

    echo "<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>";
    

    或者

    ?><script><?php echo "location.href = '".ADMIN_URL."/index.php?msg=$msg';";?></script><?php
    

    它肯定会解决你的问题。我遇到了同样的问题,但我通过按照上述方式写入标题位置解决了。

  • 这通常发生在启动会话之前脚本出现意外输出时。使用当前代码,您可以尝试使用输出缓冲来解决它。

    在脚本的最顶部和 ob_start(); 文档的最末尾 ob_end_flush(); 添加对该函数的调用

  • Bart 2月前 0 只看Ta
    引用 20

    你做

    printf ("Hi %s,</br />", $name);
    

    在设置 cookies 之前,这是不允许的。您不能在标头之前发送任何输出,甚至不能发送空白行。

返回
作者最近主题: