Tag: layout manager

如何在JLabel中对图标进行右对齐?

对于带有图标的JLabel,如果setHorizontalTextPosition(SwingConstants.LEADING) ,无论标签有多宽,都会在文本后面立即绘制图标。 这对于列表来说尤其糟糕,因为图标将遍布整个地方,具体取决于每个项目的文本长度。 我跟踪了代码,似乎在SwingUtilities#layoutCompoundLabelImpl ,文本宽度简单地设置为SwingUtilities2.stringWidth(c, fm, text) ,并且图标x设置为跟随文本而不考虑标签宽度。 这是最简单的情况: import java.awt.*; import javax.swing.*; public class TestJLabelIcon { public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { JLabel c = new JLabel(“abc”); c.setHorizontalTextPosition(SwingConstants.LEADING); c.setHorizontalAlignment(SwingConstants.LEADING); c.setIcon(UIManager.getIcon(“FileChooser.detailsViewIcon”)); c.setBorder(BorderFactory.createLineBorder(Color.RED)); JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.getContentPane().add(c); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } } […]

用JPanel创建一个棋盘

我在JPanel有一个简单的Chess板, GridLayout(8,8)作为布局管理器。 我正在尝试为字段的列名和行号添加面板。 现在我用BorderLayout创建了另一个面板作为布局管理器,在这个面板中我在BorderLayout.CENTER添加了板。 在董事会本身旁边,我在BorderLayout.SOUTH添加了一个GridLayout(0,8)面板,在BorderLayout.SOUTH添加了一个GridLayout(8,0)面板。 行号完全放在电路板旁边,因为左侧JPanel中的行数与电路板中的行数相匹配,但列名称(A,B,C,D,E,F,G,H)在由于BorderLayout.WEST中的JPanel,因此未正确放置棋盘下的JPanel。 如何制作带侧板的合适棋盘以显示字段编号/名称? 我已经尝试将南面板的布局设置为GridLayout(0,9)并将第一个字段设置为空,但左面板的宽度不等于电路板中的每个字段,因此这不是一个好的解决方法。

寻找GridBagLayout组件创建的一般方法

我正在设计一个包含20个左右组件的GUI:10个标签,4个文本字段,4个按钮和2个文本区域。 使用GridBagLayout似乎是一个好主意。 但是,对于每个组件,本书需要执行所有实例变量(即,不重用),添加组件的一般方法似乎是必须的。 我真的认为这可行: (注意:HORIZ是GridBagConstraints.HORIZONTAL的缩写; CENTER是GridBagConstraints.CENTER的缩写。) public static void addComponent(Container f, Component c, int x, int y, int w, int h, int ipadx, int ipady, float wtx, float wty, int fill, int anchor, Insets insets){ GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = w; gbc.gridheight = h; gbc.fill = fill; […]

为什么添加到框架的第一个面板消失了?

下面是将两个面板添加到框架的示例。 仅出现一个面板(第2个红色面板)。 为什么第一个面板消失了? import java.awt.*; import javax.swing.*; import javax.swing.border.EmptyBorder; public class DisappearingPanelInFrame { DisappearingPanelInFrame() { JFrame f = new JFrame(this.getClass().getSimpleName()); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.add(new ColoredPanel(Color.GREEN)); f.add(new ColoredPanel(Color.RED)); f.pack(); f.setVisible(true); } public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { new DisappearingPanelInFrame(); } }; SwingUtilities.invokeLater(r); } } class ColoredPanel extends […]

JFrame中只显示一个组件

作为我加密项目的改进,我决定制作一个小GUI。 但是,当我运行程序时,只有顶部元素出现在屏幕上,它似乎模糊了其他元素,尽管我无法检查。 有谁知道为什么? 除了e()和d()之外,下面是我的全部代码,因为它们只是加密一个字符串而与GUI无关。 我还希望能够在不编辑加密的情况下尽可能加快速度,以使其尽可能好。 @SuppressWarnings(“serial”) public class EncDecExample extends JFrame implements ActionListener { final static JPanel top = new JPanel(); final static JPanel mid = new JPanel(); final static JPanel bot = new JPanel(); final static JTextField in = new JTextField(10); final static JTextField out = new JTextField(10); final static JButton enc = new […]