我正在练习MVC风格的编程.我在一个文件中有一个Mastermind游戏,工作正常(可能除了"Check"按钮在开始时不可见).
http://paste.pocoo.org/show/226726/
但是当我把它重写为模型,视图,控制器文件时 - 当我点击空Pin(应该更新,并重新绘制新颜色)时 - 注意到了.谁能在这里看到任何问题?我尝试在不同的地方放置repaint(),但它根本不起作用:/
主要:
public class Main {
public static void main(String[] args){
Model model = new Model();
View view = new View("Mastermind", 400, 590, model);
Controller controller = new Controller(model, view);
view.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
型号:
import java.util.Random;
public class Model{
static final int
LINE = 5,
SCORE = 10, OPTIONS = 20;
Pin pins[][] = new Pin[21][LINE];
int combination[] = new int[LINE];
int curPin = 0;
int turn = 1;
Random generator = new Random(); …Run Code Online (Sandbox Code Playgroud) 现在,我的主要是用10行调用一个gui.根据这些行中有多少行有文本,调用9个类中的1个(两行必须有文本).被调用的类执行计算,我希望将进度条绑定到.以下是其中一个被调用类的示例(每个类都相似,但足够不同以保证新类.)我认为问题违反了EDT规则,但我在其上看到的所有示例都涉及到论点.运行代码时会出现框架,但在完成所有计算之前,进度条不会更新.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class twoLoan extends JFrame {
static JFrame progressFrame;
static JProgressBar progressBar;
static Container pane;
double amountSaved = 0;
int i = 0;
public void runCalcs(Double MP, Double StepAmt,
Double L1, Double L2, Double C1, Double C2,
Double IM1, Double IM2, Double M1Start, Double M2Start) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
int iterations = (int) (MP - (M1Start * M2Start));
//Create all components
progressFrame = new JFrame("Calculation Progress");
progressFrame.setSize(300, …Run Code Online (Sandbox Code Playgroud) 我有一个JTable可以由用户动态添加的行.它位于a中JScrollPane,因此当行数足够大时,滚动条变为活动状态.我的愿望是当用户添加新行时,滚动条一直移动到底部,以便在滚动窗格中看到新行.我现在(下面的SSCCE)尝试使用表模型侦听器来检测插入行的时间,并在进行检测时强制滚动条一直向下.然而,似乎这种检测"太早了",因为模型已经更新但是新行还没有实际绘制过,所以会发生的事情是滚动器在插入新行之前一直移动到底部,并且然后将新行插入窗格末端的下方(不可见).
显然这种方法在某种程度上是错误的.什么是正确的方法?
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
public class TableListenerTest {
private JFrame frame;
private JScrollPane scrollPane;
private JTable table;
private DefaultTableModel tableModel;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TableListenerTest window = new TableListenerTest();
window.frame.setVisible(true);
} catch (Exception e) { …Run Code Online (Sandbox Code Playgroud) 我对我的JScrollPanes的初学者问题非常肯定.问题是垂直滚动条与封闭面板内的组件重叠(在右侧).当滚动条与JComboBoxes的下拉位重叠时,它会变得有点痛苦.
我把问题归结为这个小片段 - 我希望它说明了这个问题.
public class ScrollTest extends JFrame
{
public ScrollTest()
{
super("Overlap issues!");
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(100,0));
for(int b=0;b<100;++b)
{
panel.add(new JButton("Small overlap here ->"));
}
JScrollPane scrollpane = new JScrollPane(panel);
add(scrollpane);
pack();
setVisible(true);
}
public static void main(String[] args)
{
new ScrollTest();
}
}
Run Code Online (Sandbox Code Playgroud)
我先看了看,但看不出是否其他人已经解决了这个问题.对不起,如果它是重复的,非常感谢任何帮助,任何人都可以提供像我这样的java-newb!
如您所知,!getValueIsAdjusting当您在jtable中选择一行(通过单击)时,不使用选择更改事件两次.如果使用键盘箭头选择行,则不会发生这种情况.要解决它,请检查是否getValueIsAdjusting返回false.
我的问题是,如果我通过点击选择一行,但是当使用键盘箭头时没有选择一行,为什么事件会触发两次?getValueIsAdjusting做了什么来解决它?
在我的Java GUI应用程序我有一个JButton和点击时调用一个function连接到一个database,然后调用function到clear一个table在DB,然后调用function从一个文件并加载读取文本variables,这就要求一个function从另一个文件中读取文本,进行比较在data从两个,然后调用function要么update或insert数据在数据库中,所有这一切工作正常.
但是我的问题与JButton它有关,当它点击时我想运行一个Indeterminate progress bar正确的用户知道工作正在完成然后就在它离开之前action listener setIndeterminate to false并设置了progress barto 的值100(complete),但在我的情况下当你点击button它保持在点击状态和progress bar冻结.
我应该实施什么来防止这种情况?可能穿线?但我对java中的线程很新.这是我的动作听众:
private class buttonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if( e.getSource() == genButton )
{
progressBar.setIndeterminate(true);
progressBar.setString(null);
try
{
dbConnect(); //connects to DB …Run Code Online (Sandbox Code Playgroud) 我目前有一个设置,我有一个JTextArea内部a,JScrollPane以便您可以滚动框中的文本.
我想要做的是设置JScrollPane,以便每当新文本添加到框中时(总是在新行的底部),它将向下滚动到底部.
有没有一种简单的方法来实现这一目标?
请注意:我不希望它被永久锁定在底部(用户仍然可以滚动文本),就像正在更新文本时一样.我正在追逐一种效果,就像在UNIX中拖尾日志文件一样.
我在学习Java中的线程时遇到了一些问题.目标是进行模拟,向我们展示兔子在某种类型的板上如何从狼群中奔跑.每只狼和每只兔子都应该成为一个线索.所以我在Test类的main方法中创建了一个GUI,并创建了一个实现Runnable接口的新类.我认为这很容易也很合乎逻辑.但是现在,我如何AddRabbit从这些线程调用该方法?因为非常线程应该像下面这样做:
但是怎么样?
JCheckBox检查但是当我使用system.out.print时它仍然显示其值为false.如果焦点丢失但JCheckBox仍然检查,则返回true.即,当我选中2复选框时,结果显示是第一个复选框.未显示第二个复选框的状态.完成编程如下所示:请运行编程并纠正我的错误.欢迎任何帮助.
public class check extends JFrame {
public check() {
setBounds(00, 40, 400, 400);
Color c = new Color(160, 200, 100);
getContentPane().setBackground(c);
Color c3 = new Color(0, 50, 50, 2);
setTitle("MARKING OF TARGET HABITATION");
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[] columnNames = {"Country", "Capital", "Population in Millions",
"Democracy"};
Object[][] data = {
{"USA", "Washington DC", 280, new Boolean(false)},
{"Canada", "Ottawa", 32, new Boolean(false)},
{"United Kingdom", "London", 60, new Boolean(false)},
{"Germany", "Berlin", 83, new Boolean(false)},
{"France", "Paris", 60, new Boolean(false)}, …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个寄存器,这样当单击一个按钮时,表格上会出现一个新条目.理想情况下,我希望在屏幕左侧构建一个表格,当单击按钮时会出现两行和新列.我希望表具有固定的大小,但是在一定数量的条目之后它应该是可滚动的.到目前为止,我已经创建并格式化了JButton我想要单击的对象以显示新条目.我也知道我应该用a JTable来追求这个.
我该怎么做这个动态表?
代码:
private void addRegister(JPanel pane) {
JPanel everythingPane = new JPanel();
JPanel pluPane = new JPanel();
Dimension button = new Dimension(200,150);
JTable pluTable = new JTable();
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.Y_AXIS));
//JPanel buttonPane = new JPanel (new FlowLayout (FlowLayout.LEFT));
JPanel subPane1 = new JPanel();
subPane1.setAlignmentX(LEFT_ALIGNMENT);
JPanel subPane2 = new JPanel();
subPane2.setAlignmentX(LEFT_ALIGNMENT);
JPanel subPane3 = new JPanel();
subPane3.setAlignmentX(LEFT_ALIGNMENT);
JPanel subPane4 = new JPanel();
subPane4.setAlignmentX(LEFT_ALIGNMENT);
JPanel subPane5 = new JPanel();
subPane5.setAlignmentX(LEFT_ALIGNMENT);
JPanel alignmentLayer …Run Code Online (Sandbox Code Playgroud) java ×10
swing ×10
jtable ×4
jprogressbar ×2
jscrollpane ×2
swingworker ×2
dynamic ×1
jcheckbox ×1
jpanel ×1
jtextarea ×1
listener ×1
rendering ×1