두 개의 다른 내부 프레임에 두 개의 Jtable이있는 응용 프로그램, 열이있는 모델이 있고 다른 것은없는 아이디어가 있습니다. 인쇄 목적으로 하나에서 다른 열을 끕니다.이 응용 프로그램에서는 모든 열을 유지하는 것이 중요하지만 인쇄 할 수 있어야하는 것은 아닙니다. 일부 열만 인쇄하면됩니다. .두 개의 다른 내부 프레임에서 두 테이블 간의 끌어서 놓기 java
제 질문은 두 개의 다른 내부 프레임에있는 두 개의 jtable간에 열을 끌어다 놓아 인쇄 할 모델을 만들 수 있습니까? 그리고 그것을하는 방법이라면?
미리 감사드립니다.
@Kleopatra의 솔루션을 시도한 후에도 필자는 열을 삭제할 수 없지만 적어도 이제는 끌어다 놓을 수 있습니다. p!
처음에는 프로그램을 실행할 때 JavaNullPointerExeption이라는 문제가 발생했습니다. 소스 테이블 모델을 가져 오는 것에 관한 것입니다. "JXTable target = new JXTable (source.getModel())"그리고 같은 구조의 두 테이블에 대한 두 모델을 만들었지 만, 이제 문제는 내가 놓을 때 "stop" 기호; 당신은 그 안에 대각선이있는 원을 알고 있습니다. 이 문제를 해결하기 위해 모든 노력을 기울 였지만 헛된 ... 그래서 도움을 주셔서 감사합니다. 여기
은 소스 테이블의 코드입니다 :package presentation;
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.TransferHandler;
import javax.swing.table.DefaultTableModel;
import org.jdesktop.swingx.JXTable;
import domain.Bulletin_Assurance;
public class Presentation_Bulletin_assur extends JInternalFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
final Presentation_Bulletin_assur frame = new Presentation_Bulletin_assur();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
TransferHandler handler;
final static String[] columnNames = { "Num du bulletin", "Num d'adhésion", "Pièce", "Nom du Beneficiaire", "Nom du malade", "Nom Medecin", "Date de consultation","Frais Medecin", "Honoraire", "Pharmacie", "Injection", "Laboratoire", "Radio", "Monture", "Verre", "Soins", "Prothése", "Hospitalisation", "Divers 1", "Divers 2", "Divers 3" };
final static Object[][] data = {
{new Integer(Bulletin_Assurance.getNum_bulletin()),
new Long (Bulletin_Assurance.getNum_adhesion()),
new Long(Bulletin_Assurance.getPiece()),
Bulletin_Assurance.getNom_Beneficiaire(),
Bulletin_Assurance.getNom_du_malade(),
Bulletin_Assurance.getNom_Medecin(),
Bulletin_Assurance.getDate_Consultation(),
new Double(Bulletin_Assurance.getMedecin()),
new Float(Bulletin_Assurance.getHonor()),
new Float(Bulletin_Assurance.getPharmacie()),
new Float(Bulletin_Assurance.getInjection()),
new Float(Bulletin_Assurance.getLaboratoire()),
new Float(Bulletin_Assurance.getRadio()),
new Float(Bulletin_Assurance.getMonture()),
new Float(Bulletin_Assurance.getVerre()),
new Float(Bulletin_Assurance.getSoins()),
new Float(Bulletin_Assurance.getProthese()),
new Float(Bulletin_Assurance.getHospitalisation()),
new Float(Bulletin_Assurance.getDiver_1()),
new Float(Bulletin_Assurance.getDiver_2()),
},
};
static DefaultTableModel model=new DefaultTableModel(data, columnNames);;
public static JXTable table=new JXTable(model);
public Presentation_Bulletin_assur() {
setFrameIcon(null);
setBounds(100, 100, 511, 492);
setResizable(true);
setLayout(new FlowLayout());
handler = new DragDropConfig();
table.setTransferHandler(handler);
table.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.setSurrendersFocusOnKeystroke(true);
table.setFont(new Font("Times New Roman", Font.PLAIN, 13));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setDragEnabled(true);
getContentPane().setLayout(new BorderLayout());
setClosable(true);
final JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
scrollPane.getViewport();
getContentPane().add(scrollPane);
}
그리고 여기에 목표 테이블의 코드입니다 :에 의해
package presentation;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.util.List;
import javax.activation.ActivationDataFlavor;
import javax.activation.DataHandler;
import javax.swing.JComponent;
import javax.swing.TransferHandler;
import javax.swing.table.TableColumn;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.table.TableColumnExt;
public class DragDropConfig extends TransferHandler {
/**
*
*/
private static final long serialVersionUID = 1L;
private final DataFlavor localObjectFlavor = new ActivationDataFlavor(
Integer.class, DataFlavor.javaJVMLocalObjectMimeType,
"Integer Column Model Index");
protected Transferable createTransferable(JComponent c) {
JXTable table = (JXTable) c;
int index = table.getSelectedColumn();
TableColumnExt column = table.getColumnExt(index);
return new DataHandler(column.getModelIndex(),
localObjectFlavor.getMimeType());
}
public boolean canImport(TransferHandler.TransferSupport info) {
return info.isDataFlavorSupported(localObjectFlavor);
}
public int getSourceActions(JComponent c) {
return TransferHandler.COPY;
}
public boolean importData(TransferHandler.TransferSupport info) {
JXTable bordereau = (JXTable) info.getComponent();
JXTable.DropLocation dl = (JXTable.DropLocation) info.getDropLocation();
try {
Integer columnFrom = (Integer) info.getTransferable().getTransferData(
localObjectFlavor);
TableColumnExt tableColumn = null;
List<TableColumn> columns = bordereau.getColumns(true);
for (TableColumn column : columns) {
if (column.getModelIndex() == columnFrom) {
((TableColumnExt) column).setVisible(true);
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
:
package presentation;
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.TransferHandler;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.table.TableColumnExt;
public class Imprimer_bordereau extends JInternalFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JScrollPane sc;
static JXTable bordereau;
private JButton imprimer;
Presentation_Bulletin_assur pr;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Imprimer_bordereau frame = new Imprimer_bordereau();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Imprimer_bordereau() {
setBounds(100, 100, 450, 300);
setResizable(true);
DefaultTableModel model=(DefaultTableModel) Presentation_Bulletin_assur.table.getModel();
bordereau=new JXTable(model);
bordereau.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
bordereau.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
bordereau.setRowSelectionAllowed(true);
bordereau.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
bordereau.setSurrendersFocusOnKeystroke(true);
bordereau.setFont(new Font("Times New Roman", Font.PLAIN, 13));
bordereau.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
sc= new JScrollPane(bordereau);
bordereau.setFillsViewportHeight(true);
sc.getViewport();
getContentPane().add(sc, BorderLayout.CENTER);
List<TableColumn> columns = bordereau.getColumns();
for (TableColumn tableColumn : columns)
{
((TableColumnExt) tableColumn).setVisible(false);
}
TransferHandler handler=new DragDropConfig();
bordereau.setTransferHandler(handler);
bordereau.setDragEnabled(true);
imprimer= new JButton("Imprimer");
imprimer.setFont(new Font("Times New Roman", Font.PLAIN, 14));
imprimer.addActionListener(this);
getContentPane().add(imprimer, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource()==imprimer)
{
pr=new Presentation_Bulletin_assur();
pr.setTitle("Les informations à imprimer");
Presentation_Bulletin_assur.table.setToolTipText("Pour choisir les informations à imprimer, \n il suffit de maintenir le clic de souris sur une case, \nd e les faire glisser vers la fenêtre intitulée fenêtre d'impression,\n et de les déposer");
MainPage.dp.add(pr);
pr.setVisible(true);
}
}
}
그리고 마지막으로, TransferHandler로 way transfer handler에서, 48 행의 droplocation "dl"과 52 행의 "tableColumn"은 unused var로 표시됩니다. 이블 즈. (어쩌면 저와 관련이 있습니다. 내 무지로 인해 유감입니다.)
활성화 프레임 워크를 사용하는 (매우 빠르게) 예입니다. 테이블이있는 BTW는 문제와 관련이 없습니다 :-) – kleopatra
그래서 가능한 일이라고 말하고 있습니다. :) 열을 끌어다 놓을 수있는 transferHandler를 추가하는 방법을 보여줄 수 있습니까? "blank"테이블 또는 인쇄 될 테이블의 모델은 무엇이되어야 하는가? –
@ user3568400 : 여기 [시작] (http://docs.oracle.com/javase/tutorial/uiswing/dnd/intro.html)를 참조하십시오. – trashgod