2014-01-11 56 views
1

我有一个JTextField被添加到OverlayLayout,但JTextField自动缩放为整个面板的尺寸,我不想要。我也不想弄乱JTextField的尺寸,因为默认的高度恰好适合字体,宽度应该由构造函数中的列数来定义。什么才是解决这个问题的正确方法?将JTextField添加到OverlayLayout

下面是我现在使用的相关代码: frame = new JFrame(“frame”); frame.setResizable(false);

panel = new GamePanel(); 
panel.setPreferredSize(new Dimension(500,300)); 
panel.setLayout(new OverlayLayout(panel)); 
JTextField t = new JTextField(50); 
panel.add(t); 

frame.add(panel); 
frame.pack(); 
frame.setVisible(true); 

GamePanel只是JPanel的一个子类;它不会做任何会影响JTextField的事情。

编辑:好吧,我听说现在使用默认的摆动布局管理器不是最好的主意。 kleopatra链接了一个涉及三个第三方布局的页面,这些布局应该完成您需要做的几乎所有事情,但是我找不到任何能让我将文本字段(或其他组件)叠加到另一个自定义渲染的面板上的任何内容。什么是正确的方法?

+0

请编辑您的问题以包含[*最小,完整,有效示例*](http://stackoverflow.com/help/mcve)目前的做法。 – trashgod

+0

只需在你的GamePanel上使用FlowLayout。 – camickr

+0

[不要使用setXXSize,永远](http://stackoverflow.com/a/7229519/203657) – kleopatra

回答

1

这是否按照你的要求工作?

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.LayoutManager; 

import javax.swing.JTextField; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.OverlayLayout; 

public class OverlaySampleAlignment0 { 
    public static void main(String args[]) { 
    JFrame frame = new JFrame("Overlay Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel panel = new JPanel(); 
    panel.setPreferredSize(new Dimension(500,300)); 

    LayoutManager overlay = new OverlayLayout(panel); 
    panel.setLayout(overlay); 

    JTextField field = new JTextField("", 12); 
    field.setMaximumSize(field.getPreferredSize()); 

    //button.setMaximumSize(new Dimension(25, 25)); 
    field.setBackground(Color.white); 
    field.setAlignmentX(0.0f); 
    field.setAlignmentY(0.0f);  
    panel.add(field); 


    frame.add(panel); 
    frame.setResizable(false); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 

高度正好是所需字体的高度,宽度(在我的例子)12“列”(JTextField中不会在我的Java设置默认情况下使用等宽字体)。另外我将它对齐在左上角。

这也可能有助于故障排除的布局问题: Link

大部分代码是从这里复制:Link。我只是添加了setMaximumSize(...)并使用了一个JTextField而不是按钮等。

+0

[不要使用setXXSize,永远](http://stackoverflow.com/a/7229519/203657) – kleopatra

+0

@kleopatra:你能澄清一下吗?这些尺寸提示告诉LayoutManager这个对象需要什么。它甚至在我提供的链接中提到:另一种提供大小提示的方法是调用组件的setMinimumSize,setPreferredSize和setMaximumSize方法。你说不信任甲骨文或你建议不使用这些方法的基础是什么? – NOhs

+0

阅读引用的线程并做一些搜索 - 稍微厌倦了重复自己:-) – kleopatra

相关问题