小编ate*_*rai的帖子

GridBagLayout面板对齐

我对GridBag布局管理器有一点问题.我试图显示9个这样的面板:

理想的布局 - 图解

为此,我将网格分开:

正在进行的工作 - 图解

对于面板1到7没有问题,它们就像我想要的那样出现.但问题始于小组S8S9.正如你所看到的那样S8,S9占据了一半的框架,但是我无法让它显示出来.该S8在的始端S4,以及S9在年底开始S4,我不能处理的一半的空间.

我想出的唯一方法就是将面板S8S9面板放在另一个采用所有框架宽度的面板上 - 但是必须有一个正确的方法来显示这两个面板而不将它们放在另一个面板中!

这是代码:

workzone.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST;
c.fill = GridBagConstraints.BOTH;
c.weightx = 0.5;
c.weighty = 0.5;
c.insets = new Insets(0,0,0,0);

//S1
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 2;
workzone.add(S1, c);

//S2
c.gridx = 2;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 1;
workzone.add(S2, c); …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel gridbaglayout

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

如何在不使用Spring等时将Swing GUI与Business Logic分开

请注意,这是一篇很长的帖子.对不起,但我想澄清一点:

我想知道如何将Swing GUI与Presentation和Business Logic分开很长一段时间.在工作中,我必须使用一个小的Swing对话框为一些数据实现3 MD Excel Export以配置导出.我们不使用像Spring这样的框架,所以我必须自己实现它.

我想完全将GUI与Business Logic分开,这些都是精确的后续任务:

  • 告诉BL从GUI开始工作
  • 从BL到GUI报告进度
  • 报告从BL到GUI的日志记录
  • 将BL结果委托给GUI

当然,GUI不应该注意BL实现,反之亦然.我创建了上述所有这些任务,例如几个接口ProgressListener,LogMessageListener,JobDoneListener等,要由业务逻辑被解雇.例如,如果业务逻辑想要告诉记录,则会调用

fireLogListeners("Job has been started");
Run Code Online (Sandbox Code Playgroud)

实现公共接口LogListener +的类附加到BL,现在将通知有关"作业已启动"的日志消息.所有这些监听器此时都是由GUI本身实现的,一般看起来像这样:

public class ExportDialog extends JDialog implements ProgressListener, LogListener, JobFinishedListener,  ErrorListener {

    @Override
    public void jobFinished(Object result){
        // Create Save File dialog and save exported Data to file.
    }

    @Override
    public void reportProgress(int steps){
        progressBar.setValue(progressBar.getValue()+steps);
    }

    @Override
    public void errorOccured(Exception ex, String additionalMessage){
        ExceptionDialog dialog = new ExceptionDialog(additionalMessage, ex);
        dialog.open();
    }

    // etc.
}
Run Code Online (Sandbox Code Playgroud)

"GUI和BL创建类"只是将GUI(作为所有这些侦听器的界面)附加到BL,它看起来像这样: …

java oop swing cohesion decoupling

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

如何使JLabel可点击?

我想自定义一个JLable让他可以点击,我不是在谈论添加一个动作监听器,因为我已经拥有,我正在谈论改变鼠标光标的反应,当JLabel获得焦点就像鼠标胡佛的反应一样浏览器中的链接.

在此输入图像描述

我觉得摇摆是不可能的.

java swing jlabel mouseover cursor

5
推荐指数
3
解决办法
5933
查看次数

打开组合框的面板的屏幕截图

我有一个JPanel包含一个JComboBox.我打算在JComboBox打开时截取此面板的截图.但我不能这样做.任何的想法?

如果您运行此代码然后Alt-P在组合打开时按,您将看到问题.

public class ScreenShotDemo {
    /**
     * @param args
     */
    public static void main(String[] args) {
        final JPanel JMainPanel = new JPanel(new BorderLayout());

        JPanel jp = new JPanel();
        jp.add(new JComboBox<String>(new String[] { "Item1", "Item2", "Item3" }));

        final JPanel jImage = new JPanel();

        JMainPanel.add(jp, BorderLayout.WEST);
        JMainPanel.add(jImage, BorderLayout.CENTER);

        jp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.ALT_DOWN_MASK), "screenshot");
        jp.getActionMap().put("screenshot", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                BufferedImage bf = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
                JMainPanel.paint(bf.getGraphics());
                jImage.getGraphics().drawImage(bf, 0,0,jImage);
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java swing screenshot popup jcombobox

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

JComboBox防止弹出窗口关闭

我需要在组合框中提供一些禁用的项目。除了防止在单击禁用的项目后关闭组合框之外,所有其他方法都工作正常。

这是我的代码:

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.plaf.basic.ComboPopup;


public class DisabledCombo {

    public static void main(String[] args) {
        final DisabledSupportComboModel model = new DisabledSupportComboModel();
        model.addElement(new Item("First element"));
        model.addElement(new Item("Second element"));
        model.addElement(new Item("Disabled", false));
        model.addElement(new Item("Fourth element"));
        final JComboBox<Item> itemCombo = new JComboBox<DisabledCombo.Item>(model);
        itemCombo.setRenderer(new DisabledSupportComboRenderer());
        final ComboPopup popup = (ComboPopup) itemCombo.getUI().getAccessibleChild(itemCombo, 0);
        final JList<?> l = popup.getList();
        final MouseListener[] listeners = l.getMouseListeners();
        for …
Run Code Online (Sandbox Code Playgroud)

java swing jcombobox

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

通过 JScrollPane 填充 JTable

JTableJScrollPane.

JTable table = new JTable(data, columnNames);
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(table);
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是如果我需要在 Scrollpanel 和 table 之间留出更多空间?我怎样才能做到这一点?例如:HTML/CSS如果我们使用<div>标签,我们有“填充”方法。我需要这样的东西。

java swing jscrollpane

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

DefaultTableModel 不返回 dataVector 中的值

JTable我的问题与和相关DefaultTableModel。我的任务是创建JTable一个显示带有复选框的数据...我成功地完成了..但是我想删除由JTable复选框选择的行...我知道这已经被问了太多次...而且我需要使用removeRow(int row)方法用于删除...但是当我执行该语句时

DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
int totalrows=model.getRowCount();
for (int i = totalrows - 1 ; i >= 0; i--)
{
    Boolean checked = (Boolean) jTable1.getModel().getValueAt(i, 8);

    if (checked) 
    {
        ((DefaultTableModel)jTable1.getModel()).removeRow(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

它总是从getRowCount()方法返回 0,因此它不会进入循环。表已经有行。

我的TableModel班级如下

public class tabmod extends DefaultTableModel
{
    public tabmod(Object rowData[][], Object columnNames[]) {
        super(rowData, columnNames);
    }

    @Override
    public Class getColumnClass(int col) {
        if (col == 8)
            return Boolean.class;
        return super.getColumnClass(col); //other columns accept String …
Run Code Online (Sandbox Code Playgroud)

java swing jtable defaulttablemodel

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

JTextArea setText()和UndoManager

我正在使用一个UndoManager来捕捉我的变化JTextArea.

setText()然而,该方法删除所有内容,然后粘贴文本.当我撤消时,我首先看到一个空白区域,然后它会显示它之前有哪些文本.

如何重现:

  1. 运行以下代码
  2. 单击setText()按钮
  3. CTRL+Z撤消(你会看到一个空的textarea!)
  4. CTRL+Z撤消(您将看到实际的先前文字)

我想跳过3).

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.Document;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;

import java.awt.event.ActionEvent;
import javax.swing.JButton;
import java.awt.event.ActionListener;

@SuppressWarnings("serial")
public class JTextComponentSetTextUndoEvent extends JFrame
{
    JTextArea area = new JTextArea();

    public JTextComponentSetTextUndoEvent()
    {
        setSize(300, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        area.setText("Test");
        area.setBounds(0, 96, 146, 165);
        getContentPane().add(area);

        JButton btnSettext = new JButton("setText()");
        btnSettext.addActionListener(new ActionListener()
        {
            public void …
Run Code Online (Sandbox Code Playgroud)

java swing undo-redo jtextarea

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

如何将JLabel放入JLabel或将JLabel划分为正方形

我已经创建了一个蛇和梯子游戏,它运行良好,但现在我想添加一点修改它.我希望每个球员都有两个球员而不是一个球员.现在新的规则变成了,同一个玩家的两个部分可以占据同一个方格,因此我需要一种方法来在同一个方格中显示它们.我使用JLable来识别每个方块,但现在我希望每个方块都能容纳多个方块.也就是说,如果一个正方形被多个部分占用,则用户必须能够点击一个部分并仅选择该部分.有没有办法将square/JLable分成几个正方形/ JLabel?我不确定JLabel是否最好在这里使用...有什么建议吗???

java swing jlabel

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

替换Ruby中的特定元素

可以说我在ruby中有一个数组,例如:

arr = ['M','X','C','Y','C']
Run Code Online (Sandbox Code Playgroud)

我如何可以替换的价值元素'M',并'Y''1'

并替换'X''2'

和最后'C''5'

所以最后我的数组转换为:

['1','2','5','1','5']
Run Code Online (Sandbox Code Playgroud)

我知道我尝试了几种方法,例如case-loop:

arr.map { |i| case i 
  when ['X'].include? i then '2'
  when ['M','Y'].include? i then '1'
  when ['C'].include? i then '5'
end }
Run Code Online (Sandbox Code Playgroud)

但那不知何故给了我这个错误:

syntax error, unexpected keyword_end, expecting '}'
... end }
Run Code Online (Sandbox Code Playgroud)

我错了什么或者我可以使用什么呢?

ruby ruby-on-rails

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

为什么我的CSS不能正常使用Java?

想知道你是否可以帮助我?我试图创造一些Java中的编码,在执行HTML代码JEditorPane的执行CSS.

我得到它来实现一些的的CSS编码作为一项规则,但它似乎忽略了"float:"在编码位.在JSFiddle(链接)上我得到它完美运行,但在Java/NB上它创建了容器,左边div是小的,假定的权利div,但它把它放在左边div,而不是右边.我在想的是Java,HTMLEditorKit以及StyleSheet不支持我想做的事情.有人能说清楚吗?

编辑:

似乎只HTML 3.2支持.这有可能的解决方法吗?

import java.awt.Dimension; 
import javax.swing.*;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;

@SuppressWarnings("serial")
public class jBulletins extends JPanel {

    javax.swing.JEditorPane bulletinBoard = new javax.swing.JEditorPane();

    public jBulletins() {

        Dimension d = new Dimension();
        d.setSize(800, 600);

        bulletinBoard.setPreferredSize(d);
        bulletinBoard.setContentType("text/html"); // NOI18N

        add(new JScrollPane(bulletinBoard));

        loadBulletins();
    }

    private void loadBulletins() {

        //<editor-fold defaultstate="collapsed" desc="HTML/CSS Script">
        String eBullStyles = …
Run Code Online (Sandbox Code Playgroud)

html css java swing

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

如何在绘图GUI中更改线条的颜色

嘿,我在试图让我的工具栏上的按钮改变我正在绘制的线条的颜色时遇到了很多麻烦.这是我的代码:

public class PaintingGUI {

private static final int FRAME_WIDTH = 960;
private static final int FRAME_HEIGHT = 640;
private final static String NEWLINE = System.lineSeparator();



private JTextArea textArea = new JTextArea();


class MyButtonListener extends JPanel implements MouseListener,
    MouseMotionListener, ActionListener {


    private int mouseX1 = -1; // the mouse Coordinates when pressed
    private int mouseY1 = -1;
  private int mouseX2 = -1; // mouse coordinates when released
  private int mouseY2 = -1;
    Color c;
    JButton red, green, blue, yellow, orange, …
Run Code Online (Sandbox Code Playgroud)

java swing

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