相关疑难解决方法(0)

Swing GroupLayout:调整和限制组件大小

GroupLayout用来管理一些动态生成的数据输入表单中的组件.布局或多或少如此:

*-----------------------------------------------*
| label A     |   field A                       | 
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*
Run Code Online (Sandbox Code Playgroud)

我使用2个并行组作为水平布局,使用单个顺序组作为垂直布局.在大多数情况下,一切都很好.

我想将标签的最大宽度(仅仅是实例JLabel)限制为父级宽度的1/3 JFrame.如果它JFrame是一个固定的大小,这将是微不足道的,但我必须处理它被调整大小.

我正在接收ComponentListener.componentResized()事件,JFrame但是一旦我收到这样的事件,我就会有点困惑.

我没有运气就试过这种方法:

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width, maxW),
                l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一种限制标签宽度的方法吗?

我可能每次都可以从头开始重建布局,但我觉得应该有一种更简单的方法.

java swing grouplayout

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

Netbeans GUI编辑器生​​成自己难以理解的代码

在netbeans中创建一个新项目时,如果我选择JAVA Desktop应用程序,它会创建一些我根本无法识别的代码,就像我在摇摆中学到的那样.

它导入包如:

org.jdesktop.application.SingleFrameApplication;
Run Code Online (Sandbox Code Playgroud)

另外,main()的声明如下:

public static void main(String[] args) {
            launch(DesktopApplication2.class, args);
        }
Run Code Online (Sandbox Code Playgroud)

这对我对JFrame,JPanel等的知识没有任何意义.

如果我尝试从头编写netbeans应用程序,我可以编写自己的swing应用程序,但我找不到GUI编辑器.

  • 从头开始创建Java应用程序时如何使用GUI编辑器?
  • 任何人都可以向我解释这个org.jdesktop.application.SingleFrameApplication和其他类吗?

请帮忙.这真令人沮丧.

java user-interface swing netbeans

7
推荐指数
1
解决办法
9831
查看次数

不可调整大小的窗口边框和定位

如果我创建不可调整大小的JFrame,并启用Windows Aero setLocation似乎没有正确考虑窗口边框.

在下面的代码中,我希望第二帧位于第一帧的右侧,而不是边框​​重叠.如果禁用Aero,或者我删除了setResizable对此的调用,则按预期完成.

import java.awt.Rectangle;
import javax.swing.JFrame;
public class FrameBorders {
public static void main(String[] args) {
    JFrame frame1 = new JFrame("frame 1");
    JFrame frame2 = new JFrame("frame 2");

    frame1.setResizable(false);
    frame2.setResizable(false);

    frame1.setVisible(true);        
    Rectangle bounds = frame1.getBounds();      
    frame2.setLocation(bounds.x+bounds.width, bounds.y);
    frame2.setVisible(true);

}
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么或这是一个错误?如何在没有重叠边框的情况下并排显示2个不可调整的对话框?

编辑:添加了截图(也将frame2更改为JDialog而不是JFrame)

Aero On: Aero On

Aero Off: Aero Off

Aero On但可调整大小: Aero On但可调整大小

java windows swing aero absolutelayout

7
推荐指数
2
解决办法
3943
查看次数

为什么JOptionPane中的JScrollPane没有显示其所有内容?

我试图将组件添加到JPanel,然后将此面板放入JScrollPane,然后将JScrollPane放入JOptionPane.

问题:只添加了19行组件.有一个for循环确定组件的行数,如果将条件计数器更改为19或更小,则将显示所有这些.

这是问题的SSCCE

import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class DynamicGroupLayout extends JPanel
{

    JButton addRecordButton;
    JTextField[] FieldsArray;
    JLabel[] LabelsArray;
    GroupLayout layout;
    JScrollPane scrollPane;

    public DynamicGroupLayout()
    {
        addRecordButton = new JButton("add record");
        layout = new GroupLayout(this);
        this.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        scrollPane = new JScrollPane(this);
        scrollPane.getVerticalScrollBar().setUnitIncrement(16);
        scrollPane.setPreferredSize(this.getPreferredSize());

        setTextFields();
        showDialog();
    }

    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(400, 500);
    }

    private void setTextFields()
    {
        int num = 30;  //If …
Run Code Online (Sandbox Code Playgroud)

java swing jscrollpane joptionpane

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

JFrame GridBagLayout组件定位

所以,我使用的是null布局,但被告知这是一个糟糕的主意,因此决定使用GridBagLayout,因为它被认为是最容易定制的.我在定位我的组件时遇到了麻烦,我真的很困惑我如何在屏幕的顶部中间找到一个标签,我的桌子在中间,我的登录按钮在右下角.有谁知道如何做到这一点?

这是我的代码:

import javafx.geometry.HorizontalDirection;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;

public class Main
{

    JFrame window = new JFrame("PE Fixture");   //JFrame variables

    JPanel container = new JPanel();
    JPanel guestFixturesPanel = new JPanel();
    JPanel loginPanel = new JPanel();
    JPanel adminFixturesPanel = new JPanel();
    JPanel createPanel = new JPanel();

    String[] columns = {"Sport", "Location", "Date", "Result"};
    String[][] data = {{"Football", "AQA Highschool", "12.11.13", "5 - 0"},
            {"Tennis", "Wembley", "26.11.14.", "TBC"}};


    CardLayout cardLayout = new CardLayout();
    GridBagConstraints c = new GridBagConstraints(); …
Run Code Online (Sandbox Code Playgroud)

java swing jframe

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

动作侦听器不处理鼠标单击

我打算为最短路径构建一个GUI.我在for循环中创建了按钮.现在我想更改按下按钮的颜色,但是我收到有关动作侦听器的错误.它说"线程中的异常"主"java.lang.Error:未解决的编译问题:AbstractButton类型中的方法addActionListener(ActionListener)不适用于参数(Final_GUI)".虽然我已经使用JPanel测试了这段代码它在那里工作得很好,但在这里它现在不起作用.我想改变按下的按钮的颜色.如果再次按下该按钮,我想要恢复其先前的颜色.以下是我想做的事情: 在此输入图像描述.. :(

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.event.*;
import javax.swing.JFrame;

public class Final_GUI extends JFrame {
JLabel label;
ButtonGroup cbg;
JRadioButton radio_1;
JRadioButton radio_2;
JRadioButton radio_3;
JCheckBox checkbox_1;
JCheckBox checkbox_2;
JCheckBox checkbox_3;
JScrollPane scrollpane_1;
JComboBox combobox_1;
JList list_1;
JScrollPane sp_list_1;
JComboBox combobox_2;
JButton Orange;
JButton Exit;
JLabel for_text;

int check [][]= new int [100][100];
int x=100;
int y=200;
JFrame frame = new JFrame();
   JButton[][] buttons = new JButton[x][y];
    JPanel mPanel = …
Run Code Online (Sandbox Code Playgroud)

java eclipse swing

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