我使用swing在中心制作了BorderLayout
和GridLayout
的GUI。我想在我JPanel
的{{1}}以东添加一个我在另一个班级制作的三角形,但是不能让它显示出去。
当我为BorderLayout
设置bgcolor
时,我得到了一个奇怪的小结果,如果您愿意,可以查看代码:gistlink
我觉得问题出现在JPanel
构造函数中,但我不确定如何进一步测试。我尝试了TriGoButton
的不同版本但却从未见过绿色三角形。
paint()
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class TestGUI extends JFrame implements ActionListener {
private JPanel content;
private JTextField placeTxtField;
public static void main(String[] args) {
TestGUI frame = new TestGUI();
frame.pack();
frame.setVisible(true);
}
@SuppressWarnings("rawtypes")
public TestGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
content = new JPanel();
content.setLayout(new BorderLayout());
setContentPane(content);
// issue
JPanel rightPanel = new JPanel();
content.add(rightPanel, BorderLayout.EAST);
rightPanel.add(new TriGoButton());
// issue?
JPanel leftPanel = new JPanel();
content.add(leftPanel, BorderLayout.WEST);
JPanel centerPanel = new JPanel();
content.add(centerPanel, BorderLayout.CENTER);
centerPanel.setLayout(new GridLayout(3, 3, 0, 20));
JLabel countyLbl = new JLabel("County");
centerPanel.add(countyLbl);
JComboBox countyDropDown = new JComboBox();
centerPanel.add(countyDropDown);
JLabel muniLbl = new JLabel("Munipalicity");
centerPanel.add(muniLbl);
JComboBox muniDropDown = new JComboBox();
centerPanel.add(muniDropDown);
JLabel placeLbl = new JLabel("City or place");
placeLbl.setToolTipText("search");
centerPanel.add(placeLbl);
placeTxtField = new JTextField();
centerPanel.add(placeTxtField);
placeTxtField.setColumns(15);
placeTxtField.setToolTipText("enter w/e");
JPanel bottomPanel = new JPanel();
content.add(bottomPanel, BorderLayout.SOUTH);
JButton goBtn = new JButton("Clicky");
bottomPanel.add(goBtn);
goBtn.setToolTipText("Please click.");
goBtn.addActionListener(this);
JPanel topPanel = new JPanel();
content.add(topPanel, BorderLayout.NORTH);
JLabel headlineLbl = new JLabel("headline");
topPanel.add(headlineLbl);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
编辑: ////////////
答案 0 :(得分:3)
JPanel
课程添加TriGoButton
的原因,但这会给您带来问题。paint
,这可能会导致问题无法解决,因为父级容器在绘制子项时不会始终包含在更新中。有关详细信息,请参阅Painting in AWT and Swing和Performing Custom Painting。BorderLayout
将使用该组件preferredSize
来制定有关应如何调整大小的决策。您的TriGoButton
类应覆盖getPreferredSize
方法并返回适当的默认大小.. 答案 1 :(得分:2)
我已经添加了您的代码。我认为您的问题是您的TriGoPanel不会覆盖getPreferredSize,因此它可能会调整自身的大小。考虑在类中添加类似:
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
你有宽度和高度尺寸的int常量PREF_W,PREF_H。
编辑:我强烈反对MadProgrammer推荐的所有内容!