标签: layout-manager

java GridBagLayout锚点

学习GridBagLayout,这里的问题是,名称标签和combox没有显示在面板的顶部,但我已将其锚点设置为NORTH.为什么?

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Test2 {    
    public Test2() {
        JFrame frame = new JFrame();
        frame.setTitle("test");
        frame.getContentPane().setLayout(new GridLayout(1,2));
        frame.setSize(800, 600);

        JPanel panel1 = new JPanel();
        panel1.setLayout(new GridBagLayout());

        JLabel label = new JLabel("name");
        GridBagConstraints gridBagConstraints = new GridBagConstraints();   
        gridBagConstraints.anchor = GridBagConstraints.NORTH;
        gridBagConstraints.weightx = 0.0;
        gridBagConstraints.weighty = 0.0;
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        panel1.add(label, gridBagConstraints);

        String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
        JComboBox petList …
Run Code Online (Sandbox Code Playgroud)

java swing layout-manager gridbaglayout

6
推荐指数
1
解决办法
1万
查看次数

如何在JPanel上叠加,调整大小和居中组件?

我花了一些时间在这里阅读和试验,并提出了一些方法,但还没有完成任何工作,所以我想知道更多有经验的Swing程序员会做什么.

我的应用程序的主窗口包含JPanel的自定义子类型,用于显示从数学函数计算的图像.这可能需要一些时间来计算,所以当发生这种情况时,我会在面板中间显示一条文本消息和一个进度条.我希望文本和进度条在调整面板大小时适当调整大小,可能使用面板宽度的恒定分数.

目前我有另一个包含文本和进度条的JPanel子类型,我将这个"进度面板"添加到主面板,并将其设置为在需要时可见.主面板不包含任何其他组件,但有自己的paintComponent()方法来显示从另一个类获取的BufferedImage.这有一些问题,因为它代表:

  • 进度面板在应该的时候并不总是可见,可能是因为代码中没有任何地方明确地确保它被绘制在图像的前面.
  • 进度面板始终占用应用程序面板的整个宽度.它使用主面板中的BoxLayout垂直居中,并在进度面板之前和之后使用一些垂直胶水,但我没有设法让水平工作的相同技巧,并且在任何情况下,进度面板的首选水平尺寸是不一定是对的.一种几乎可行的方法是在进度面板周围使用带有水平和垂直支柱的BorderLayout,但进度面板的大小仍然不正确,并且在调整主面板大小时需要更改支柱.

那你会怎么做?

  • 在主面板中使用不同的布局管理器?
  • 不知何故使用LayeredPane或OverlayLayout?
  • 将另一个图层添加到包含图像面板和进度面板的包含层次结构中?
  • 上面的一些组合,或其他什么?

如何调整文本大小.我是否需要在调整面板大小时显式创建新的字体,或者是否有任何方法可以更自动地执行此操作? -

java swing font-size jpanel layout-manager

6
推荐指数
1
解决办法
1856
查看次数

使2个JButton大小相等

我有两个JButton文本"Ok"和"Cancel".我用它GridBagLayout来对齐它们JDialog.我把锚设置为GridBagConstraints.CENTER.由于文本"Ok"和"Cancel"中字符数的不同,按钮的大小不同.如何正确对齐它们,使它们每个都具有相同的大小.我试过以下但没有用.

okayButton.setSize(cancelButton.getSize());
Run Code Online (Sandbox Code Playgroud)

java swing jbutton layout-manager gridbaglayout

6
推荐指数
1
解决办法
3293
查看次数

Java Swing:更改 BorderLayout 上的边框宽度/高度

我是 Java Swing 的新手。我正在尝试制作一个包含三个按钮的框架;一个在中间,另一个在顶部,最后一个在右侧。我想让 NORTH 和 EAST 边界的宽度相同。但是现在,EAST 边界比 NORTH 边界宽。

我想知道是否有一种方法可以在 BorderLayout 中更改 WEST/EAST 边框的宽度或 NORTH/SOUTH 边框的高度。

java swing awt layout-manager border-layout

6
推荐指数
2
解决办法
3万
查看次数

获取挥杆组件的位置

我把一些JPanel放到另一个JPanel中,它的布局是Box Layout和Y-Axis.在我放置所有面板后,我需要从JPanel容器面板中获取每个添加的JPanel的Y位置.但是,当我试图得到它时,每个JPanel的Y位置总是为零.请告诉我如何从JPanel容器JPanel获取每个Jpanel的Y位置.

这就是我所做的,

JPanel panelHolder = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
for(int i = 0; i< 10; i++){
   JPanel p = new JPanel(); 
   panelHolder.add(p);
}

int componentCount = panelHolder.getComponentCount();

for (int j = 0; i < componentCount ; j++) {

  Component c = pnlRowHolder.getComponent(i);
  JPanel p = (JPanel)c;
  System.out.println(p.getY());//I get zero for all
}
Run Code Online (Sandbox Code Playgroud)

java swing jpanel layout-manager

6
推荐指数
1
解决办法
2万
查看次数

按钮大小(Java)

我用Java创建了一个简单的菜单,但我无法弄清楚如何更改按钮的大小.我的菜单看起来像这样: 目前的样子

我希望最后一个按钮与其他按钮一样大小.

tlacTisk.setSize(10,10);
tlacTisk.setPreferredSize(10,10);
Run Code Online (Sandbox Code Playgroud)

不起作用.

代码,我创建按钮和框:

JButton tlacSVG = new JButton();
        tlacSVG.setText("Export do SVG");
        tlacSVG.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                exportujSVG();
            }
        });

        JButton tlacPNG = new JButton();
        tlacPNG.setText("Export do PNG");
        tlacPNG.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                exportujPNG();
            }
        });

        JButton tlacTisk = new JButton();
        tlacTisk.setText("Tisk...");
        tlacTisk.setPreferredSize(new Dimension(50, 25));
        tlacTisk.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                tiskni();
            }
        });


        Box boxTlacitek = Box.createVerticalBox();
        boxTlacitek.add(Box.createVerticalStrut(5));
        boxTlacitek.add(tlacSVG);
        boxTlacitek.add(Box.createVerticalStrut(10));
        boxTlacitek.add(tlacPNG);
        boxTlacitek.add(Box.createVerticalStrut(10));
        boxTlacitek.add(tlacTisk);
        boxTlacitek.setBorder(BorderFactory.createTitledBorder("Menu"));

        okno.add(boxTlacitek, BorderLayout.EAST); …
Run Code Online (Sandbox Code Playgroud)

java swing jbutton layout-manager preferredsize

6
推荐指数
1
解决办法
3万
查看次数

布局管理器和定位

  • 如何在不使用ComponentListener或其他监听器的情况下将GlassPaane中的JLabel粘贴到JProgressBar的相对浮动坐标,

  • 是否有标准布局管理器中的built_in通知程序可以通知其内部状态,并且可以访问覆盖,而不是我尝试使用ComponentListener和NullLayout

在此输入图像描述

.

在此输入图像描述

SSCCE关于ComponentListener和与NullLayout

import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
//http://stackoverflow.com/questions/14560680/jprogressbar-low-values-will-not-be-displayed
public class ProgressSample {

    private JFrame frame = new JFrame("GlassPane instead of JLayer");
    private JLabel label;
    private GridBagConstraints gbc = new GridBagConstraints();
    private JProgressBar progressSeven;

    public ProgressSample() {
        frame.setLayout(new FlowLayout());
        frame.add(new JButton("test"));
        frame.add(new JCheckBox("test"));
        frame.add(new JRadioButton("test"));
        // Nothing is displayed if value is lover that 6 …
Run Code Online (Sandbox Code Playgroud)

java swing layout-manager glasspane componentlistener

6
推荐指数
1
解决办法
240
查看次数

如何在 JButton 单击时更新/刷新 JPanel?

我正在尝试绘制图形,JButton单击时应显示图形。为了创建数据集,我正在获取一些值JTextField,然后创建一个图表并绘制它。我有两个问题:

  1. 调整窗口大小后图表变得可见,并且
  2. 当我更改文本字段值时,图表不会刷新。

这是我的程序:

public class Test extends JFrame {

private JPanel contentPane;
private JTextField textField;
private ChartPanel chartPanel;

public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);

JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.WEST);
panel.setLayout(new MigLayout("", "[][grow]", "[][][][][]"));

JLabel lblA = new JLabel("a");
panel.add(lblA, "cell 0 2,alignx trailing");

textField = new JTextField();
panel.add(textField, "cell 1 2,growx");
textField.setColumns(10);

JButton btn = new JButton("Plot");
btn.addActionListener(new …
Run Code Online (Sandbox Code Playgroud)

java swing jfreechart miglayout layout-manager

6
推荐指数
1
解决办法
8950
查看次数

如何让FlowLayout将JPanels调整到底部,就像对待其他组件一样?

我有一个案例,我将JPanels添加到FlowLayout,他们没有将自己与布局的底部对齐.我正在使用它layout.setAlignOnBaseline(true),它正确地将JLabel对齐到面板的底部.但是,一旦这些标签被包裹在面板中,它就不再起作用了.这是我的意思的一个例子,顶部和底部有两个面板.

import javax.swing.*;
import java.awt.*;

public class BadLayout {

    private static final Font font1 = new Font("Arial", Font.BOLD, 14);
    private static final Font font2 = new Font("Arial", Font.BOLD, 30);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Bad layout");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            FlowLayout layout = new FlowLayout(FlowLayout.LEADING, 0, 0);
            layout.setAlignOnBaseline(true);

            JPanel topPanel = new JPanel();
            topPanel.setLayout(layout);
            topPanel.setBackground(Color.BLACK);
            for (int i = 0; i < 10; i++) {
                JLabel label = new JLabel("Foo");
                label.setForeground(Color.WHITE);
                label.setBackground(Color.RED);
                label.setOpaque(true); …
Run Code Online (Sandbox Code Playgroud)

java layout swing layout-manager flowlayout

6
推荐指数
1
解决办法
1119
查看次数

How to move components to next line in FlowLayout?

I am adding components in JPanel which is set as FlowLayout, they are not moving on next line even there is no space in left in that line. Here is the screenshot of the problem

import javax.swing.*;
import java.awt.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
public class GUI extends JFrame
{
    private JLabel jlfname;
    private JPanel p1;
    private JTextField t1;
    private JLabel jllname;
    private JTextField t2;
    private JLabel jltitle;
    private JTextField t3;
    GUI()
    {
        jlfname=new JLabel("First Name : ");
        p1=new JPanel(); …
Run Code Online (Sandbox Code Playgroud)

java swing layout-manager flowlayout

6
推荐指数
1
解决办法
7437
查看次数