我想设置一个jFileChooser作为表的单个单元格的编辑器(不是该表的整个列,因为将使用各种其他编辑器,如comboBox等).有任何建议或示例代码吗?(我已经在这里查看了这些示例如何使用Oracle的表
我有2个JTextFields:
JTextField txtJobType, txtPriorityCode;
Run Code Online (Sandbox Code Playgroud)
这是我需要的功能:
当用户在txtJobType中键入"管理"并点击选项卡(或点击远离)时,将执行错误检查以查看该字段是否为空或输入的文本是否存在于数据库中.我这样做的方式是:
private void txtJobTypeFocusLost(java.awt.event.FocusEvent evt) {
System.out.println("JobType Focus Lost");
if (!checkFieldExists(txtJobType.getText(), "jobType", "jobCode",
JobType.class) || txtJobType.getText().isEmpty()) {
txtJobType.requestFocusInWindow();
txtJobType.selectAll();
} else {
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果该字段不存在或文本为空,则将焦点返回到txtJobType并突出显示所有文本(如果有)
这没有问题.但是,我有txtPriorityCode字段需要具有完全相同的行为.所以我做了:
private void txtPriorityCodeFocusLost(java.awt.event.FocusEvent evt) {
System.out.println("PriorityCode Focus Lost");
if (!checkFieldExists(txtPriorityCode.getText(), "priority", "priorityCode",
Priority.class) || txtPriorityCode.getText().isEmpty()) {
txtPriorityCode.requestFocusInWindow();
txtPriorityCode.selectAll();
}
}
Run Code Online (Sandbox Code Playgroud)
这是问题开始的地方:如果用户将jobType和制表符保留为优先级,则代码会尝试将焦点返回到jobtype,但由于此时优先级也为空,它将尝试从jobtype返回焦点,从而产生此输出:
PriorityCode Focus Lost
JobType Focus Lost
PriorityCode Focus Lost
JobType Focus Lost
Run Code Online (Sandbox Code Playgroud)
任何有关如何实现此行为的帮助表示赞赏,因为我必须为至少10个其他文本字段执行此操作.
谢谢!
嗨,这是我的表格设置的代码:
String [] column = {"MacAddress","PcName","OperatingSystem","IpAddress","Port","Status"};
model = new DefaultTableModel(0,column.length);
model.setColumnIdentifiers(column);
mainTable = new JTable(model);
mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for(int i=0;i<=column.length-1;i++){
mainTable.getColumnModel().getColumn(i).setPreferredWidth(300);
}
pane = new JScrollPane(mainTable);
pnlTabel = new JPanel();
pnlTabel.setBorder(BorderFactory.createTitledBorder(""));
pnlTabel.setPreferredSize(new Dimension(dim.width*70/100, dim.height*60/100));
pnlTabel.add(pane);
addMainPanel(pnlTabel);
Run Code Online (Sandbox Code Playgroud)
这是我的addMainPanel()函数:
public void addMainPanel(Component pnl){
mainPanel.add(pnl);
mainPanel.revalidate();
}
Run Code Online (Sandbox Code Playgroud)
这是我的mainPanel的代码:
mainPanel = new JPanel();
mainPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
add(mainPanel,"Center");
Run Code Online (Sandbox Code Playgroud)
我正在为我的框架使用边框布局:
setLayout(new BorderLayout(0,0));
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使我使用这组代码来设置我的JTable以适应但似乎所有这一切都失败了,这段代码:
mainTable.setAutoResizeMode(JTa![enter image description here][1]ble.AUTO_RESIZE_OFF);
for(int i=0;i<=column.length-1;i++){
mainTable.getColumnModel().getColumn(i).setPreferredWidth(300);
}
Run Code Online (Sandbox Code Playgroud)
何时使用该代码,我的jtable不会调整大小,只会添加到底部的水平滚动条上.
我有一组5个单选按钮,我需要检查是否至少选择了其中一个.
这是正确的吗?
buttonGroup1.isSelected(ButtonModel);
但这是什么ButtonmModel?
这是我的问题:

我正在创建一个下拉菜单,当右键单击JTree中的一个元素时,问题是JTree在JScrollPane中,并且窗格越滚动,弹出菜单就越远了.
右键单击会触发一个MouseEvent,它会在以下代码中被拦截,其结果是创建一个新的弹出菜单.
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
int row = tree.getClosestRowForLocation(e.getX(), e.getY());
tree.setSelectionRow(row);
TreePath path = tree.getPathForRow(row);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
// If this object is a Search...
if(node.getUserObject().getClass() == Search.class) {
jp = new ItemEditPopUpMenu(tree, row, true);
} else {
jp = new ItemEditPopUpMenu(tree, row, false);
}
jp.show(this, e.getX(), e.getY());
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在做的就是从MouseEvent抓取位置并将其用作在以下行中创建弹出菜单的位置:
jp.show(this, e.getX(), e.getY());
Run Code Online (Sandbox Code Playgroud)
现在我注意到这是发送事件的元素的相对位置,这解释了问题,JScrollPanel在滚动时从JFrame偏移,问题是如何判断到多远?
我只是不知道,这就是我需要帮助的地方.非常感谢提前!
我用JComboBox CellEditor列创建了一个JTable.这很好.但是,当我尝试通过组合框检索所选值时,我只获取鼠标在特定行中选择的值.我似乎无法获得每行的选定值.这是我的代码:
addressList = new ArrayList<>();
for(int currentRow = 0; currentRow < editAddressFrm.getAddressTable().getRowCount(); currentRow++)
{
//ADDRESS
offenderAddress = new MyAddress();
DefaultCellEditor ownerEditor = (DefaultCellEditor) editAddressFrm.getAddressTable().getCellEditor(currentRow, 1);
JComboBox ownerCb =(JComboBox) ownerEditor.getComponent();
ListItem selectedItem =(ListItem) ownerCb.getSelectedItem(); //HERE IS WHERE I HAVE THE PROBLEM.I AM NOT GETTING THE VALUE FOR THE SPECIFIC ROW
offenderAddress.setOwnerCode(selectedItem.getID());
offenderAddress.setLine1(
editAddressFrm.getAddressTable().getModel().getValueAt(currentRow, 2).toString()
);
offenderAddress.setLine2(
editAddressFrm.getAddressTable().getModel().getValueAt(currentRow, 3).toString() );
offenderAddress.setCity(
editAddressFrm.getAddressTable().getModel().getValueAt(currentRow, 4).toString() );
offenderAddress.setProvince(
editAddressFrm.getAddressTable().getModel().getValueAt(currentRow, 5).toString() );
offenderAddress.setPostalZone(
editAddressFrm.getAddressTable().getModel().getValueAt(currentRow, 6).toString() );
}
Run Code Online (Sandbox Code Playgroud) 我想将文本写到文件中,每次这样做都应该换一行。我已经看到这个问题的许多答案只是“使用\ n”,但这对我不起作用。
这是我使用的代码:
File file = new File("C:\\Users\\Schule\\IdeaProjects\\projectX\\src\\experiment\\input.txt");
boolean result;
if(!file.exists()) {
try {
// create a new file
result = file.createNewFile();
// test if successfully created a new file
if(result) {
System.out.println("Successfully created " + file.getCanonicalPath());
}
} catch (IOException e) {
e.printStackTrace();
}
}
String output = name + ": " + highscoreString + "\n";
try {
PrintWriter out = new PrintWriter(new FileWriter(file, true));
out.append(output);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我编写的代码在文件中写入了新的Highscore和创建者的姓名。它的工作原理非常好,除了它可以将所有内容写在这样的行上,例如:Nicola:您的高分是10秒Thomas:您的高分是11秒,但我想要:Nicola:您的高分是10秒Thomas:您的高分是11秒
我知道我还需要修复和改进一些其他东西,但是现在,这是我最大的问题。有谁知道该怎么办?(对不起,我叫btw;)
我写了一个JTable的单元格编辑器.现在它有一个bug.我希望它在第一次加载时显示默认值.编辑后,它将显示用户输入.运行应用程序,您将了解该错误.
怎么解决?
谢谢.
package com.swing;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class PropPageTest extends JPanel {
private static final long serialVersionUID = 1555593265606867986L;
public JTableX table;
public DefaultTableModel model;
private String[] col_names = { "Name", "Value" };
private String[] anchor_values = { "CENTER", "NORTH" };
public String[] default_value = {"John", "NORTH"};
public boolean isFirstTimeLoad = true;
private void createGUI() {
setLayout(new BorderLayout());
model …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,需要能够使用java.util.date格式找到两个日期之间的差异.我正在使用SimpleDateFormat类来解析字符串输入,但它似乎解析错误.这是我的代码.我感谢任何帮助
SimpleDateFormat s = new SimpleDateFormat("yyyy/mm/dd");
Date startDate = s.parse(dateField.getText()); //input is 2012/03/10
System.out.println(START_DATE);//output is Tue Jan 10 00:03:00 MST 2012
Run Code Online (Sandbox Code Playgroud) 我有一个抽奖活动程序,曾经有很多命令和组件等.但我想通过省略许多命令或组件,如按钮或标签,使它更简单.当我试图这样做时,出现错误(42个错误),所有这些都说:
error: class, interface or enum expected.
Run Code Online (Sandbox Code Playgroud)
有人可以帮我追踪这些错误吗?
顺便说一句,这是我的代码(更新):
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.sql.*;
public class Case extends JFrame implements ActionListener
{
static Case app=new Case();
JDesktopPane desk=new JDesktopPane();
Connection cn=null;
ResultSet rs=null;
Statement stat=null;
JInternalFrame log=new JInternalFrame("WELCOME!", true,true,true,true);
JInternalFrame game=new JInternalFrame("Hi! Welcome to RAFFLE DRAW by BSIT22C");
int arr[]=new int[10];
int range=0;
JTextField gametext=new JTextField("",2);
JTextField txtuser=new JTextField("",20);
JMenuBar gamebar=new JMenuBar();
JMenu mnuf=new JMenu("File");
JMenuItem fnew=new JMenuItem("New Game");
JMenuItem fquit=new JMenuItem("Quit Game");
JMenuItem flogout=new …Run Code Online (Sandbox Code Playgroud) java ×10
swing ×8
jtable ×4
cell ×1
file ×1
focus ×1
jfilechooser ×1
jscrollpane ×1
line-breaks ×1
netbeans-7 ×1
string ×1